#ifndef __TEXTBOX_H__
#define __TEXTBOX_H__

#include "Label.h"
#include "SDLControls.h"
#include <SDL_ttf.h>

#define DEFAULT_TEXT_BOX_TEXT_COLOR_R 0xFF
#define DEFAULT_TEXT_BOX_TEXT_COLOR_G 0xFF
#define DEFAULT_TEXT_BOX_TEXT_COLOR_B 0xFF

#define DEFAULT_TEXT_BOX_BG_COLOR_R 0x00
#define DEFAULT_TEXT_BOX_BG_COLOR_G 0x00
#define DEFAULT_TEXT_BOX_BG_COLOR_B 0x00

#define DEFAULT_TEXT_BOX_FOCUSED_TEXT_COLOR_R 0x00
#define DEFAULT_TEXT_BOX_FOCUSED_TEXT_COLOR_G 0x00
#define DEFAULT_TEXT_BOX_FOCUSED_TEXT_COLOR_B 0x00

#define DEFAULT_TEXT_BOX_FOCUSED_BG_COLOR_R 0xFF
#define DEFAULT_TEXT_BOX_FOCUSED_BG_COLOR_G 0xFF
#define DEFAULT_TEXT_BOX_FOCUSED_BG_COLOR_B 0xFF

/**
 * Clase que representa una caja de texto
 */
class TextBox: public Label {

	int charWidth;

public:

	TextBox():Label(""){

		//establezco el color de fondo por defecto
		setBGColor(DEFAULT_TEXT_BOX_BG_COLOR_R, DEFAULT_TEXT_BOX_BG_COLOR_G, DEFAULT_TEXT_BOX_BG_COLOR_B);

		//establezco el color de fuente por defecto
		setTextColor(DEFAULT_TEXT_BOX_TEXT_COLOR_R, DEFAULT_TEXT_BOX_TEXT_COLOR_G, DEFAULT_TEXT_BOX_TEXT_COLOR_B);
	}

	TextBox(const char* text):Label(text){

		//establezco el ancho en caracteres
		string aux(text);
		this->charWidth = aux.length();

		//establezco el color de fondo por defecto
		setBGColor(DEFAULT_TEXT_BOX_BG_COLOR_R, DEFAULT_TEXT_BOX_BG_COLOR_G, DEFAULT_TEXT_BOX_BG_COLOR_B);

		//establezco el color de fuente por defecto
		setTextColor(DEFAULT_TEXT_BOX_TEXT_COLOR_R, DEFAULT_TEXT_BOX_TEXT_COLOR_G, DEFAULT_TEXT_BOX_TEXT_COLOR_B);
	}

	void keyDown(const SDL_Event& event);

	void setCharWidth(const int& width);

	unsigned int const getCharWidth();

	bool isFocusable();

	void focus(const SDL_Event& event);

	void lostFocus(const SDL_Event& event);

	virtual ~TextBox();
};

#endif /* TEXTBOX_H_ */
